package plugin

// Plugin 定义插件标准接口
type Plugin interface {
	// 初始化插件
	Init(chan PluginMsg) error
	// 执行核心逻辑
	Execute() error
	// 销毁资源,预留，未使用
	Destroy() error
	// 获取插件元信息
	Meta() PluginMeta
	//接收消息
	Receiver(PluginMsg)
}

// PluginMeta 插件元数据
type PluginMeta struct {
	Name    string //插件名称，具有唯一性
	Version string
	Author  string
}

// 发送者和接收者的值为json格式,格式如下：
const (
	Type_Plugin  = "Plugin"  //插件对象
	Type_Topic   = "Topic"   //主题对象
	Type_Service = "Service" //主体对象
	Type_Other   = "Other"   //其他对象，预留
)

const (
	Command_Exit    = "Service.Exit"           //退出系统
	Command_Topic   = "Service.ExecuteTopic"   //执行主题命令
	Command_Result  = "Service.ExecuteResult"  //执行来自于UDP传送过来的命令
	Command_Plugin  = "Service.ExecutePlugin"  //执行插件命令
	Command_Service = "Service.ExecuteService" //执行主体命令
)

type Object struct {
	Type string //类型，采用上述字符串常量,以Type_打头
	Name string //名称
}

// 插件之间传递消息
type PluginMsg struct {
	Handle   uint64   //句柄，可扩展(值为0，保留给主体使用，大于0则为各插件使用)
	Cmd      string   //命令，保留以“Service.“开头的命令
	Sender   Object   //发送者
	Receiver []Object //接收者,可以多个
	Option   string   //附加数据
	Data     []byte   //传送的数据体，以字节方式传递
}
